package main

import "fmt"

/**
数据类型转换介绍

	Go语言采用数据类型前置加括号的方式进行类型转换，格式如：T（表达式）。T表示要转换的类型；表达式包括变量、数值、函数返回值等。

	TIPS：
		1. Go语言中只有强制类型转换，没有隐式类型转换。类型转换时需要考虑两种类型之间的关系和范围，是否会发生数值截断；
		2. 布尔型无法与其他类型进行转换
*/
func main() {

	/*
		一. 浮点型与整型之间转换
		TIPS：float和int的类型精度不同，使用时需要注意float转int时精度的损失
	*/
	a := 100
	fmt.Println(a)
	fmt.Println(float64(a))
	// 将会发生数值截断
	b := 100.8
	fmt.Println(b)
	fmt.Println(int(b))

	/*
		二. 整型转字符串类型。在Go语言中，不允许字符串转int，会产生'(type untyped string) to type int'错误，这种类型的转换相当于byte或rune
		    转string。int数值是ASCII码的编号或unicode字符集的编号，转成string就是根据字符集，将对应编号的字符查找出来。当该数值超出unicode
			编号范围，则转成的字符串显示为乱码。

			TIPS:
				• ASCII字符集中数字的十进制范围是48～57；
				• ASCII字符集中大写字母的十进制范围是65～90；
				• ASCII字符集中小写字母的十进制范围是97～122；
				• unicode字符集中汉字的范围是4e00～9fa5，十进制范围是19968～40869
	*/
	c := 50
	fmt.Println(string(c))
	d := 100
	fmt.Println(string(d))
	// 超出unicode编号范围显示为乱码
	fmt.Println(string(4086940869))
}
